package com.nand.library.base.base;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.os.Looper;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewStub;
import android.view.inputmethod.InputMethodManager;
import android.widget.TextView;
import android.widget.Toast;

import com.nand.library.base.widget.ActionBar;
import com.nand.library.base.widget.dialog.LoadingDialog;

import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;

public abstract class BaseActivity extends FragmentActivity {
    //获取TAG的activity名称
    protected final String TAG = this.getClass().getSimpleName();

    protected LoadingDialog loadingDialog;
    private ViewStub emptyView;
    //封装Toast对象
    private static Toast toast;
    public Context mContext;
    public Activity activity;
    private ActionBar actionBar;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this;
        activity = this;
        //加入Activity管理器
        BaseApp.getApplication().getActivityManage().addActivity(this);

        //设置布局
        if (isActionBar()) {
            setContentView(com.nand.library.base.R.layout.activity_base);
            ((ViewGroup) findViewById(com.nand.library.base.R.id.fl_content)).addView(getLayoutInflater().inflate(initLayout(), null));
            actionBar = findViewById(com.nand.library.base.R.id.actionbar);
        } else {
            setContentView(initLayout());
        }

        loadingDialog = new LoadingDialog(mContext);
        //初始化控件
        initView();
        //设置数据
        initData();
    }

    /**
     * 是否需要ActionBar
     */
    protected boolean isActionBar() {
        return false;
    }

    /**
     * 防止为null
     * @return
     */
    public ActionBar mActionBar() {
        if (actionBar != null) {
            return actionBar;
        } else {
            showToast("请设置ActionBar是否显示");
            return new ActionBar(this);
        }
    }

    /**
     * 设置标题栏Texts
     *
     * @param title
     */
    protected void setTitleText(String title) {
        if (actionBar != null) {
            actionBar.setCenterText(title);
        }
    }

    /**
     * 设置状态栏背景颜色
     *
     * @param color
     */
    protected void setStatusBar(int color) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            getWindow().setStatusBarColor(ContextCompat.getColor(this, color));//设置状态栏颜色
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//实现状态栏图标和文字颜色为暗色
        }
    }

    /**
     * 初始化布局
     *
     * @return 布局id
     */
    protected abstract int initLayout();

    /**
     * 初始化控件
     */
    protected abstract void initView();

    /**
     * 设置数据
     */
    protected abstract void initData();

    /**
     * 保证同一按钮在1秒内只会响应一次点击事件
     */
    public abstract class OnSingleClickListener implements View.OnClickListener {
        //两次点击按钮之间的间隔，目前为1000ms
        private static final int MIN_CLICK_DELAY_TIME = 1000;
        private long lastClickTime;

        public abstract void onSingleClick(View view);

        @Override
        public void onClick(View view) {
            long curClickTime = System.currentTimeMillis();
            if ((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) {
                lastClickTime = curClickTime;
                onSingleClick(view);
            }
        }
    }

    /**
     * 同一按钮在短时间内可重复响应点击事件
     */
    public abstract class OnMultiClickListener implements View.OnClickListener {
        public abstract void onMultiClick(View view);

        @Override
        public void onClick(View v) {
            onMultiClick(v);
        }
    }

    /**
     * 显示提示  toast
     *
     * @param msg 提示信息
     */
    @SuppressLint("ShowToast")
    public void showToast(String msg) {
        try {
            if (null == toast) {
                toast = Toast.makeText(mContext, msg, Toast.LENGTH_SHORT);
            } else {
                toast.setText(msg);
            }
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    toast.show();
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
            //解决在子线程中调用Toast的异常情况处理
            Looper.prepare();
            Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
            Looper.loop();
        }
    }


    /**
     * 隐藏软键盘
     */
    public void hideSoftInput() {
        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        if (getCurrentFocus() != null && null != imm) {
            imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        }
    }

    /**
     * 显示软键盘
     */
    public void showSoftInput() {
        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        if (getCurrentFocus() != null && null != imm) {
            imm.showSoftInputFromInputMethod(getCurrentFocus().getWindowToken(), 0);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //将Activity从管理器移除
        BaseApp.getApplication().getActivityManage().removeActivity(this);
    }

    //***************************************空页面方法*************************************
    protected void showEmptyView(String text) {
        showEmptyOrErrorView(text, com.nand.library.base.R.mipmap.bg_no_data);
    }

    protected void showEmptyView() {
        showEmptyView(getString(com.nand.library.base.R.string.no_data));
    }

    protected void showErrorView(String text) {
        showEmptyOrErrorView(text, com.nand.library.base.R.mipmap.bg_no_net);
    }

    protected void showErrorView() {
        showErrorView(getString(com.nand.library.base.R.string.error_data));
    }

    public void showEmptyOrErrorView(String text, int img) {

        if (emptyView == null) {
            emptyView = findViewById(com.nand.library.base.R.id.vs_empty);
        }
        emptyView.setVisibility(View.VISIBLE);
        findViewById(com.nand.library.base.R.id.iv_empty).setBackgroundResource(img);
        ((TextView) findViewById(com.nand.library.base.R.id.tv_empty)).setText(text);
        findViewById(com.nand.library.base.R.id.ll_empty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onPageClick();
            }
        });
    }

    protected void hideEmptyView() {
        if (emptyView != null) {
            emptyView.setVisibility(View.GONE);
        }
    }

    /**
     * 空页面被点击
     */
    protected void onPageClick() {

    }
    //***************************************空页面方法*********************************

//    private ViewStub emptyView;
//    protected Context mContext;
//    protected ActionBar actionBar;
//    protected LoadingDialog loadingDialog;
//
//    @Override
//    protected void onCreate(Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//        mContext = this;
//        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
//        if (isActionBar()) {
//            setContentView(R.layout.activity_base);
//            ((ViewGroup) findViewById(R.id.fl_content)).addView(getLayoutInflater().inflate(getLayoutId(), null));
//            actionBar = findViewById(R.id.actionbar);
//        } else {
//            setContentView(getLayoutId());
//        }
//        //加入Activity管理器
//        BaseApp.getApplication().getActivityManage().addActivity(this);
//
//        loadingDialog = new LoadingDialog(mContext);
//
//    }
//
//    @Override
//    protected void onDestroy() {
//        super.onDestroy();
//        //将Activity从管理器移除
//        BaseApp.getApplication().getActivityManage().removeActivity(this);
//    }
//
//    @Override
//    public void onAttachedToWindow() {
//        super.onAttachedToWindow();
//        initView();
//    }
//
//
//    //***************************************空页面方法*************************************
//    protected void showEmptyView(String text) {
//        showEmptyOrErrorView(text, R.mipmap.bg_no_data);
//    }
//
//    protected void showEmptyView() {
//        showEmptyView(getString(R.string.no_data));
//    }
//
//    protected void showErrorView(String text) {
//        showEmptyOrErrorView(text, R.mipmap.bg_no_net);
//    }
//
//    protected void showErrorView() {
//        showErrorView(getString(R.string.error_data));
//    }
//
//    public void showEmptyOrErrorView(String text, int img) {
//
//        if (emptyView == null) {
//            emptyView = findViewById(R.id.vs_empty);
//        }
//        emptyView.setVisibility(View.VISIBLE);
//        findViewById(R.id.iv_empty).setBackgroundResource(img);
//        ((TextView) findViewById(R.id.tv_empty)).setText(text);
//        findViewById(R.id.ll_empty).setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                onPageClick();
//            }
//        });
//    }
//
//    protected void hideEmptyView() {
//        if (emptyView != null) {
//            emptyView.setVisibility(View.GONE);
//        }
//    }
//
//    /**
//     * 空页面被点击
//     */
//    protected void onPageClick() {
//
//    }
//    //***************************************空页面方法*********************************
//
//
//    /**
//     * 是否需要ActionBar
//     * TODO 暂时用此方法 后续优化
//     */
//    protected boolean isActionBar() {
//        return false;
//    }
//
//    protected void setTitleText(String title) {
//        if (actionBar != null) {
//            actionBar.setCenterText(title);
//        }
//    }
//
//    protected abstract int getLayoutId();
//
//    protected abstract void initView();
//
//    public <T extends View> T getView(int id) {
//        View view = this.findViewById(id);
//        return (T) view;
//    }
//
//    protected void setStatusBar(int color) {
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//            getWindow().setStatusBarColor(ContextCompat.getColor(this, color));//设置状态栏颜色
//            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//实现状态栏图标和文字颜色为暗色
//        }
//    }
}
